package com.itany.corejava.code14_lambda;

import java.util.function.Consumer;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年12月14日 13:42
 */
public class Test01_基本用法 {
    public static void main(String[] args) {

        //匿名内部类的用法
        // SomeInterface someInterface = new SomeInterface() {
        //     @Override
        //     public String test(String s1, String s2) {
        //         return s1 + s2;
        //     }
        // };


        // Lambda表达式，可以简化匿名内部类
        // (参数)->{方法体}
        // 参数列表中, 不需要指定参数类型, 直接指定形参名
        // 当没有参数时, 直接写小括号() 即可
        // 当只有一个参数的时候, 小括号() 可以省略
        // 当方法体中如果只有一行代码, 那么大括号{} 可以省略
        // 当方法体中如果只有一行代码, 并且是return 语句, 那么大括号{} 与return 关键字都可以省略
        SomeInterface some = (s1, s2) -> s1 + s2;
        System.out.println(some.test("aa", "bb"));

        SomeInterface2 someInterface2 = new SomeInterface2() {
            @Override
            public void test(String s1) {
                System.out.println("这是一个字符串:" + s1);
            }
        };
        SomeInterface2 some2 = s1 -> System.out.println("这是一个字符串:" + s1);
        some2.test("hello world");


        SomeInterface3 someInterface3 = new SomeInterface3() {
            @Override
            public void test() {
                System.out.println("哈哈，我就来试试");
                System.out.println("嘻嘻，你来");
            }
        };

        SomeInterface3 some3 = () -> {
            System.out.println("哈哈，我就来试试");
            System.out.println("嘻嘻，你来");
        };
        some3.test();
    }

}

interface SomeInterface {
    String test(String s1, String s2);
}

interface SomeInterface2 {
    void test(String s1);
}

interface SomeInterface3 {
    void test();
}

